﻿using Abp.Application.Services.Dto;
using AbpProjectTemplate.Application.Dtos;
using System.Threading.Tasks;

namespace AbpProjectTemplate.Application
{
    public interface IMultiLingualCrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput, TGetInput, TDeleteInput, TTranslationDto>
        : ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput, TGetInput, TDeleteInput>
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TListEntityItem : IEntityDto<TPrimaryKey>
        where TUpdateInput : IEntityDto<TPrimaryKey>
        where TGetInput : IEntityDto<TPrimaryKey>
        where TDeleteInput : IEntityDto<TPrimaryKey>
        where TTranslationDto : TranslationDto
    {
        Task Translate(TTranslationDto input);
    }

    public interface IMultiLingualCrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput, TTranslationDto>
        : ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput, EntityDto<TPrimaryKey>, EntityDto<TPrimaryKey>>
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TListEntityItem : IEntityDto<TPrimaryKey>
        where TUpdateInput : IEntityDto<TPrimaryKey>
        where TTranslationDto : TranslationDto
    {

    }

    public interface IMultiLingualCrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TEditDto, TTranslationDto>
        : ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TEditDto, TEditDto, EntityDto<TPrimaryKey>, EntityDto<TPrimaryKey>>
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TListEntityItem : IEntityDto<TPrimaryKey>
        where TEditDto : IEntityDto<TPrimaryKey>
        where TTranslationDto : TranslationDto
    {
    }

    public interface IMultiLingualCrudApplicationService<TEntityDto, TListEntityItem, TGetPagedListInput, TEditDto, TTranslationDto>
        : ICrudApplicationService<TEntityDto, int, TListEntityItem, TGetPagedListInput, TEditDto, TEditDto, EntityDto<int>, EntityDto<int>>
        where TEntityDto : IEntityDto<int>
        where TListEntityItem : IEntityDto<int>
        where TEditDto : IEntityDto<int>
        where TTranslationDto : TranslationDto
    {
    }
}

